IIS

推荐列表 站点导航

当前位置:首页 > 服务器技术 > IIS >

ISAPI_Rewrite 3.1 教程中文版

来源:互联网  作者:网友投稿  发布时间:2021-01-10 13:33
ISAPI_Rewrite 是一款适用于IIS的功能强大的基于正则表达式的URL处理模块。它兼容Apache的mod_rewrite的语法,从而使仅仅复...

第一章:软件介绍
ISAPI_Rewrite 是一款适用于IIS的功能强大的基于正则表达式的URL处理模块。它兼容Apache的mod_rewrite的语法,从而使仅仅复制.htaccess文件就把配置从appach移植到IIS中或者从IIS移值到appach中变成可能。请参阅3.2兼容性图表这一节。
ISAPI_Rewrite最重要的功能:
ISAPI_Rewrite提供了和Apach mod_rewrite相同的句法和行为,使仅仅拷贝.htaccess文件就完成配置移植成为功能。(要想阅读更多关于与mod_rewrite的兼容性,请参阅3.2兼容性图表这一节。)
正则表达式支持灵活而强大的配置。
极速而且容易升级的纯C++代码。
真正的分布式配置:实时监控服务器全局级别、虚拟主机(网站)级别、目录级别的.htaccess文件。
隔离性:用户级配置只影响本地用户环境,从而使ISAPI_Rewrite成为Web主机提供商的理想解决方案。
重要的应用示例:
搜索引擎优化。
一台Web服务器的代理内容经过另一台web服务器。
防止内容被吸血(盗链)。
阻断特定主机、反向链接或者烦人的搜索机器人。
内容商议:向不同的语言用户或者不同的浏览器用户提供不同的文件。示例
为群集式服务器架构模拟负载均衡。
定价资料
45天的试用期
单机版99美元
ISAPI_Rewrite精简版是免费的。在这里可以看到受限的细节说明。
大宗采购可议折扣。

2.1系统要求
ISAPI_Rewrite可以被安装在下列操作系统中:
Windows 2000 with IIS 5
Windows XP with IIS 5.1
Windows Server 2003 with IIS 6.0
Windows Vista with IIS 7.0
Windows Server 2008 with IIS 7.0
在安装ISAPI_Rewrite之前,操作系统中必须先安装IIS。
32位和64位的Windows版本都是支持的,但是你必须下载32位版和64位版两种不同的安装包。Windows Installer 2.0必须运行安装程序。你可以从微软的网站上下载到最新版本的Windows Installer。
在Windows Vista和Windows Server 2008上安装ISAPI_Rewrite,还必须先安装下面两个模块(默认情况下这两个模块是不安装的)
ISAPI过滤器
ISAPI 扩展

2.2安装程序
在运行安装包之前请先阅读系统要求部分。下载并安装某个版本的ISAPI_Rewrite.msi,依照安装向导的说明操作。安装过程是自动的,并有自我描述。ISAPI_Rewrite在自动安装过程中必须重启IIS。下列服务必须被重启:IISADMIN、W3SVC。不需要手工把任何ISAPI筛选器或者扩展加入到网站或者全局列表中。它能够在安装和配置过程中自动完成。
命令行安装
ISAPI_Rewrite也能够通过命令行进行后台安装。请使用以下命令行语法来安装:

复制代码 代码如下:

msiexec /i ISAPI_Rewrite3.msi /qn AcceptEULA=Yes REGISTRATIONCODE=Code
REGISTRATIONNAME=Name


用命令行来后台反安装ISAPI_Rewrite请使用下面的语法:

复制代码 代码如下:

msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes


2.3手工安装
要手工安装ISAPI_Rewrite的话,你必须下载不同的手工安装包包含所有必须的文件。ISAPI_Rewrite精简版不支持手工安装。你可以安装全部功能或者仅仅安装它们中的一部分。
手工安装包包含下列文件:
ISAPI_Rewrite.dll - 这是ISAPI筛选器本身。
ISAPI_RewriteProxy.dll - 这是为代理操作的ISAPI扩展模块必不可少的。
license.rtf - EULA的产品许可证。
ISAPI_Rewrite.chm - .文档文件。
httpd.conf - 全局配置文件示例。
安装ISAPI_Rewrite,首先你必须在你在IIS系统中注册ISAPI_Rewrite.dll作为ISAPI筛选器。按默认ISAPI_Rewrite.dll文件是用来作为全局ISAPI筛选器的。而且它还能够被安装到某个特定的网站里,你需要记住在同一时间段里只有一个ISAPI_Rewrite.dll实例能够加载到一个IIS工作进程里,这意味着如果你决定把ISAPI_Rewrite的ISAPI筛选器单独地安装到每个站点里的话,你必须把这些站点切换高隔离模式,从而为这些网站产生独立的工作进程。如果你需要在每个站点上分别安装ISAPI_Rewrite,我们通常会建议改为在整个IIS上全局地安装它。
在Window 2000,Window XP 和Windows Server 2003中注册ISAPI 筛选器,无论是整个IIS服务器要用它还是个别WEB网站要用它,都要用IIS 的MMC管理单元来把ISAPI_Rewrite.dll添到ISAPI筛选器列表。在Windows Vista和Windows Server 2008中首先你需要安装可选IIS组件:万维网服务、应用程序开发功能、ISAPI筛选器。
如果你需要代理服务器功能,你还需要将ISAPI_RewriteProxy.dll注册为ISAPI扩展来侍服文件扩展名“*. rwhlp”。在不同的IIS版本中要求不同的操作。请参阅你管理的IIS版本的文档来了解如何注册一个新的ISAPI扩展并把它映射到IIS系统的文件扩展名上。在Windows Vista和windows server 2008首先必须安装可选的IIS组件:万组网服务、应用程序开发功能、ISAPI筛选器。使用短路径名(8.3模式)作为ISAPI_RewriteProxy.dll的模块路径,如果路径里有一个空格字符,IIS载入这个模块时将失败。
把httpd.conf文件放在ISAPI_Rewrite.dll文件的同一目录下并编辑它。
把下列两行内容放到httpd.conf文件中以注册ISAPI_Rewrite 产品:
RegistrationName=Your registration name
RegistrationCode=REG-CODE-PROVIDED-FROM-HELICON依照“运行ISAPI_Rewrite的权限需求”这一部分的说明来检查文件系统权限。
2.4反安装
反安装程序会删除所有安装程序所生成的文件、从管理元库中注销筛选器,并删除所有由安装程序所添加的其它管理元库变化。如果用户决定在反安装过程中保留用户文件的话,下列用户数据文件在反安装后会被留下来。

文件名

 

说明

 

Program Files/Helicon/ISAPI_Rewrite/httpd.conf

 

用户规则的主配置文件

 

Program Files/Helicon/ISAPI_Rewrite/error.log

 

包含错误日志的文件

 

Program Files/Helicon/ISAPI_Rewrite/rewrite.log

 

包含重写日志的文件

 

.htaccess (various folders)

 

用户创建的含有规则的配置文件

 

“删除用户创建的文件”的选项在将反安装过程中提供给用户。如果启用这个选项则卸载程序也将删除位于Program Files文件夹里用户创建的文件。 .htaccess文件不会被删除。
要用命令行后台卸载ISAPI_Rewrite,请使用下面的语法:

复制代码 代码如下:


msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes


2.5运行ISAPI_Rewrite所需的权限
在一个干净的默认Windows系统上自动安装ISAPI_Rewrite不要求任何权限调整。但是一些其它产品比如说Plesk、IIS锁定工具的安装,等等,可能收紧服务器的安全性,并妨碍ISAPI_Rewrite的正常运行。下面是ISAPI_Rewrite的权限需求的列表单子:
在Windows 2000、Windows XP和Windows 2003的IIS5兼容模式下,筛选器运行在System帐户下的inetinfo.exe进程中。那个system帐户至少得被授予放置ISAPI_Rewrite安装文件的那个文件夹的“读取”和“目录浏览”的权限。我们还建议给予system帐号对这个文件夹的一般修改权。这将允许生成一些包含解析或者其它错误的文件。system帐号还必须在任何包含了.htaccess文件的网站文件夹里同样被授予这些权限,否则ISAPI_Rewrite将不能加载并监视它。
请稍留意ISAPI_Rewrite安装目录上的任何一点拒绝权限设置,因为在Windows 操作系统中,拒绝权限优先于任何允许权限记录。
在Windows 2003的天然IIS模式(WPI模式)以及Windows Server 2008中,无论是筛选器还是代理服务都运行在每个网站相应的运行程序池的w3p.exe工作进程中,每个应用程序池都可以使用它自己的定制来配置,这可能使权限设置成了一种复杂的工作。然而,在一个正确的IIS配置中,每个使用中的定制必须是IIS_WPG组的一个成员。因此,IIS_WPG组可以被用来代替System帐号去分配前面所写的权限需求。
在Windows Vista 中权限配置是和Windows 2003的配置差不多的,只是它没有IIW_WPG组。所以,所有的WPI帐号(一般Network Service是它的惟一帐号)都必须授予上述必需权限。
此外,为了让代理服务功能能工作,你必须在网站属性或者运行代理服务的web应用程序的属性中给予一个“纯脚本”的执行权限。
2.6MSI的自定义行为自定义行为
 

自定义行为

 

说明

 

WiseAltStartup
自动智能启动

 

为运行在延时模式中的自定义行为保存属性的当前状态。
使用一个可执行文件(dll)
发生在:安装、反安装。

 

WiseCleanup
智能清理

 

这个行为被调用来清理上一个自定义行为所遗留下的临时文件
使用一个可执行文件(dll)
发生在:安装、反安装。

 

WiseStartup
智能启动

 

这个行为使调用一个.dll文件或者提取必要Wisescript.exe文件和.dll文件的行为可以传递参数。
使用一个可执行文件(dll)
发生在: 安装、反安装

 

WiseUpgradeCheck
智能可选择地升级

 

这个行为被调用来解决当Windows安装程序运行时不检测应用程序的早期版本的问题。
使用一个可执行文件(dll)
发生在:安装。

 

WiseUpgradeCheckEx
智能预选升级

 

添加这个行为用来解决当Windows安装程序运行时不检测应用程序的早期版本的问题。
使用一个可执行文件(dll)
发生在:安装。

 

WiseGetIISVersion
智能获得IIS版本

 

对主要的IIS版本设置属性(IISVERSION).
使用一个可执行文件(dll)
发生在:安装。

 

RegisterFilterInMetabase
在管理元库中注册筛选器

 

这个行为添加一个命名为ISAPI_Rewrite3的全局ISAPI筛选器到IIS管理元库里
IIS5, IIS6 管理元库: IIS:/LM/W3SVC/Filters/ add key ISAPI_Rewrite3
IIS:/LM/W3SVC/Filters/FilterLoadOrder append "ISAPI_Rewrite3"
使用一个可执行文件(dll)
发生在:安装。

 

RemoveFilterFromMetabase
从管理元库中删除筛选器

 

这个行为从IIS管理元库里移除了名为ISAPI_Rewrite3的全局ISAPI筛选器。
IIS5, IIS6 管理元库: IIS://localhost/W3SVC/LM/W3SVC/Filters/ delete key ISAPI_Rewrite3
IIS:/LM/W3SVC/Filters/FilterLoadOrder remove"ISAPI_Rewrite3"
使用一个可执行文件(dll)
发生在:反安装、回滚。

 

AddApplicationExtension
添加应用程序扩展

 

只用于Windows 2003机器添加ISAPI_RewriteProxy.dll到ISAPI扩展中,并使Web服务器扩展名列表中的这个ISAPI扩展名可用。
IIS6管理元库: IIS:/LM/W3SVC/
adds entry to the在管理元库属性 WebSvcExtRestrictionList中增加metabase property "ISAPI_Rewrite3 proxy"条目;
在管理元库属性 ApplicationDependencies 增加"ISAPI_Rewrite3 proxy;ISAPI_Rewrite3"条目;
使用一个可执行文件(dll)
发生在:安装。

 

RemoveApplicationExtension
删除应用程序扩展

 

只用于Windows 2003从ISAPI扩展中删除ISAPI_RewriteProxy.dll,并从web服务器扩展名列表中删除这个ISAPI扩展名。
IIS6管理元库: IIS:/LM/W3SVC/
1.从管理元库属性 WebSvcExtRestrictionList 中删除"ISAPI_Rewrite3 proxy"条目;
2.从管理元库属性 ApplicationDependencies中删除"ISAPI_Rewrite3 proxy;ISAPI_Rewrite3"条目;
使用一个可执行文件(dll)
发生在:反安装、回滚。

 

RegisterExtensionInScriptMap
在脚本映射中注册扩展

 

在IIS管理员库中将ISAPI_RewriteProxy.dl注册为ISAPI扩展来处理*.rwhlp文件扩展名
IIS5,IIS6管理元库: IIS://LM/W3SVC/
使用一个可执行文件(dll)
发生在:安装。

 

RemoveExtensionFromScriptMap
从脚本映射中删除扩展

 

从IIS管理元库中移除作为ISAPI扩展、用于处理*.rwhlp文件扩展名的ISAPI_Rewrite.dll的注册信息
IIS5, IIS6管理元库: IIS://LM/W3SVC/
使用一个可执行文件(dll)
发生在:反安装、回滚。

 

GetServisesStatus
获得服务状态

 

保存IISADMIN、W2WC、NNTP、SMTP 和FTP 服务的当前状态
创建msi属性: [SERVICES_STATUS]
使用一个可执行文件(dll)
发生在: 安装、反安装。

 

StartServicesEx
按预设开启服务

 

根据状态预设来启动ISADMIN、W2WC、NNTP、 SMTP 和 FTP 服务
使用msi 属性: [SERVICES_STATUS]
使用一个可执行文件(dll)
发生在: 安装、反安装。

 

SaveProductID
保存产品ID

 

如果要注册产品的话,保存REGISTRATIONNAME和REGISTRATIONCODE的属性值
使用msi 属性: [REGISTRATIONNAME] , [REGISTRATIONCODE];
使用文件: [INSTALLDIR]\ISAPI_Rewrite3\httpd.conf
使用一个可执行文件(dll)
发生在: 安装。

 

Check32bitMode
检测32位模式

 

在64位系统中检查32位IIS兼容模式是否可用,从而安装正确的ISAPI筛选器版本。IIS6, IIS7
使用管理元库路径: IIS://LM/W3SVC/AppPools property Enable32bitAppOnWin64;
使用msi 属性:[ENABLE32BITAPPONWIN64]
检查一个32位的应用程序是否能运行在一台安装了64位版本的windows的电脑上。
使用javascript脚本
发生在: 安装。

 

CheckIISModules
检测IIS模块

 

在IIS7的机器上检查是否需要安装IsapiFilterModule和IsapiModule模块
IIS7 管理元库路径:
<system.webServer>
<globalModules>
<add name="IsapiModule" image="%windir%\System32\inetsrv\isapi.dll" />
<add name="IsapiFilterModule" image="%windir%\System32\inetsrv\filter.dll" />

</globalModules>
</system.webServer>
使用javascript脚本
发生在: 安装。

 

AddGlobalIsapiFilter
添加全局ISAPI筛选器

 

只用于IIS7的机器。这个行为会在IIS管理元库里添加一个命名为ISAPI_Rewrite3的全局ISAPI_Rewrite筛选器
IIS7的管理元库路径:
<configuration>
<system.webServer>
<isapiFilters>
<filters>
<filter name="ISAPI_Rewrite3" path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll" enabled="true" enableCache="false">
</filter>
</filters>
</isapiFilters>
</system.webServer>
</configuration>
使用JavaScript脚本
发生在:安装。

 

DeleteGlobalIsapiFilter
删除全局ISAPI过滤器

 

只用于IIS7的机器,这个行为会从IIS管理元库中删除名为ISAPI_Rewrite3的全局ISAPI筛选器。
IIS7的管理元库路径:
<configuration>
<system.webServer>
<isapiFilters>
<filters>
<filter name="ISAPI_Rewrite3" path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll" enabled="true" enableCache="false" >
</filter>
</filters>
</isapiFilters>
</system.webServer>
</configuration>
使用JavaScript脚本
发生在:反安装、回滚。

 

AddIsapiCgiRestriction
添加ISAPI CGI约束

 

Only for IIS7 machines register ISAPI_RewriteProxy.dll as ISAPI extension in IIS metabase.
只用于IIS7的机器,在IIS管理元库中将ISAPI_RewriteProxy.dl为ISAPI扩展
IIS7管理元库路径:
<configuration>
<system.webServer>
<security>
<isapiCgiRestriction>
<add path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" allowed="true" description="Helicon Proxy" />
</isapiCgiRestriction>
</security>
</system.webServer>
</configuration>
使用JavaScript脚本
发生在:安装。

 

DeleteIsapiCgiRestriction
删除ISAPI CGI约束

 

只用于IIS7的机器,从IIS管理元库中删除用作ISAPI扩展的ISAPI_RewriteProxy.dll。
IIS7 管理元库路径:
<configuration>
<system.webServer>
<security>
<isapiCgiRestriction>
<add path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" allowed="true" description="Helicon Proxy" />
</isapiCgiRestriction>
</security>
使用JavaScript脚本
发生在:反安装、回滚。

 

AddScriptMap
添加脚本映射

 

只用于IIS7的机器,在IIS管理元库中将ISAPI_RewriteProxy.dll注册为ISAPI扩展用于处理*.rwhlp文件扩展名。
IIS7管理元库路径:
<configuration>
<system.webServer>
<handlers>
<add name="Helicon Proxy" path="*.rwhlp" verb="*" modules="IsapiModule" scriptProcessor="C:\Program
Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" resourceType="Unspecified"/>

</handlers>
</system.webServer>
</configuration>
使用JavaScript脚本
发生在:安装。

 

DeleteScriptMap
删除脚本映射

 

只用于IIS7的机器,从IIS管理元库里去除用作ISAPI扩展以处理*.rwhlp文件扩展名的ISAPI_RewriteProxy.dll的注册
IIS7管理元库路径:
<configuration>
<system.webServer>
<handlers>
<add name="Helicon Proxy" path="*.rwhlp" verb="*" modules="IsapiModule" scriptProcessor="C:\Program
Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" resourceType="Unspecified"/>

</handlers>
</system.webServer>
</configuration>
使用JavaScript脚本
发生在:反安装、回滚。

 

3.1基本概念

ISAPI_Rewrite提供了一个基于规则的重写引擎能飞速重写被请求的URL。它支持几乎无限量的规则和几乎无限量的附加规则条件来提供真正灵活和有效的URL处理机制。可以根据HTTP头、服务器变量、被请求的URL本身以及其它不同的条件的测试结果来对URL作出处理。
URL数据处理是用一个文本配置文件来定制的,内含各种指令设置。配置分几种等级。首先是全局(服务器范围的)配置指令,放置在ISAPI_Rewrite安装目录里的一个名为httpd.conf的文件里。那里还有若干个标签可以封装应用到特殊位置的指令:<VirtualHost>、<Directory>、<DirectoryMatch>、<Files>、 <FilesMatch>、<Location>以及<LocationMatch>。最后ISAPI_Rewrite支持可以放在任何网站目录里的.htaccess文件,那些文件中的规则可以应用到该位置以及它的子目录中。所有的配置文件在每次修改文件后都会被自动重载。允许用第三方程序和脚本来修改文件。
在很多情况下ISAPI_Rewrite是用来重写URL的。除了重写之外,ISAPI_REWRITE能够修改、生成、删除任何其它客户端Request中的HTTP头。模块操作可以载入改写、代理、重定向或者阻断原始客户端到服务器的请求。
Rewriting可能使服务器在得到了一个客户端的源请求时用一个新的URL继续请求处理。新的URL可以包括查询串部分(跟在问号后面),也可以指向任何一个完全的静态文件或者脚本(例如asp)、或者程序(例如.exe),等等。对用户和网站配置来说重写是彻底透明的。因为它Web应用程序收到请求之前在服务器内部执行。
Proxying使URL经过内部处理后指向另一台服务器,并很快传递到远程服务器上(换言之,规则处理在这里中止了)。远程服务器的响应很快被传回客户端。代理服务器要求你指定完整的有效URL,以协议、包括主机名开头等等。ISAPI_Rewrite使用ISAPI扩展来处理代理请求,你可以在“代理服务器配置”这一章里读到更多信息。
Redirection将发送一个带有重定向指令的即时响应(HTTP响应码为302或者说301),将网址设置为一个新的位置。您可以在重定向指令里使用绝对URL格式(这是RFC2616所要求的)将请求重定向到不同的主机、端口和协议。如果此信息被忽略, ISAPI_Rewrite将自动照当前的协议、服务器名称和目录位置提供URL。重定向指令总是导致重写引擎中止处理后面的规则序列。
每个规则按它在配置文件中出现的顺序来应用。目录级配置文件从父路径开始一个接一个地处理,来自于全局配置文件的规则最先适用。
在修改URL之前ISAPI_Rewrite会保存原URL到Http头,命名为X-Rewrite-URL。然后它能够在脚本中作为HTTP_X_REWRITE_URL服务器变量取回。因为在IIS里,系统变量名不能被修改,所以ISAPI_Rewrite不能提供与Apache兼容的变量名REQUEST_URI。如果你的应用程序的设计要依赖于REQUEST_URI变量,你必须修改它,用HTTP_X_REWRITE_URL变量来代替。下面是一个PHP代码补丁的示例:

if (isset($_SERVER['HTTP_X_REWRITE_URL']))
{
$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
}

后面跟有RewriteRule(或者RewriteProxy)指令的多重RewriteCond指令只影响单个规则。如果一些条件需要被用于多个规则,必须重复写这些条件指令以应用到每条规则上。

3.2和Apache下mod_rewrite的兼容性

这个版本的ISAPI_Rewrite是为了最大程度上保持与Apache的mod_rewrite的兼容性。这个目标已经很大程度上实现了,尽管有一些功能无法执行,因为它们和Apeach以及UNIX结构高度绑定,而且它们在IIS上执行是不敏感的。举例说明:第H条:“强制内容处理”标记不能执行,因为在IIS中内容处理的范围依赖于扩展名。或者第[NS]条:“没有子请求”标记是无意义的,因为在IIS中是没有子请求的。
这里有一个完整的ISAPI_Rewrite和mod_rewrite兼容性图表。标记为绿色的功能或指令是充分支持的,黄色的功能是部分支持或计划在下一版本中支持,标示为红色的功能是不支持的。
· 兼容Perl的正则表达式 (plus extended syntax)
· 服务器级httpd.conf配置
· 虚拟网站.htaccess配置文件
· 目录.htaccess配置文件
· <VirtualHost>
· <Directory>
· <DirectoryMatch>
· <Files>
· <FilesMatch>
· <Location>
· <LocationMatch>
· AccessFileName
· RewriteEngine
· RewriteRule
o $N 规则后向引用
o %N RewriteCond 后向引用
o ${mapname:key|default}
o %{VARNAME} 服务器变量
o '!' 取非
o [C] 与下一个规则联锁
o [CO=name:val:domain:lifetime:path] 设置cookie
o [E=var:val] 设置环境变量
o [F] 强制禁止应答
o [G] 强制继续应答
o [H=content-handler] 明确的内容处理 (不适用)
o [L] 上一个规则标记
o [N] 再次应用规则
o [NC] 大小写不敏感
o [NE] 不转义输出
o [NS]非内部子请求
o [P]代理通过
o [PT] 传递通过下一个处理程序 (一直开启)
o [QSA] 追加查询字符串
o [R =code] 重定向
o [S=num] 跳到下面第 n条规则
o [T=MIME-type] 强制明确应答 MIME 类型
· RewriteCond
o [NC] 大小写不敏感
o [OR] 逻辑并集
o %{HTTP:header}
o '!'
o '<CondPattern' 大于比较符
o '>CondPattern' 小于比较符
o '=CondPattern' 等于比较符
o '-d' 目录存在
o '-f' 文件存在
o '-s' 非零文件
o '-l' 符号链接
o '-x' 有可执行权限的文件
o '-F' 通过子请求文件存在
o '-U' 通过子请求URL存在
· RewriteBase
· RewriteMap
o txt: 文本映射
o rnd: 随机映射
o int: 内部函数 toupper, tolower, escape, unescape
o prg: 外部程序
o dbm: 散列文件
· RewriteLog
· RewriteLogLevel
· RewriteOptions
· RewriteLock
· AllowOverride

3.3使用环境以及处理顺序
以下是这个程序文档中要被用到的使用环境的详解:
server config
这个标志表示该指令可以用在全局httpd.conf配置文件中,但是不能用在任何一个分区(例如<Virtualhost>或者<Directory>)内部。它不允许放在.htaccess文件中。
vitrual host
这意味着指令可以出现在<VirtualHost>容器内。
directory
这个标志表示指令在<Diretory>、<Location>、<Files>容器内可用,而且它们的正则表达式是等价的。
.htaccess
使用环境标为它的指令可以出现在每个目录的.htaccess文件中。记住当RewriteRule指令用在.htaccess配置文件中时,它将自动从路径中剥去本地目录前缀,只对剩下的部分应用规则。你可以使用RewriteBase指令显式地给这些规则指定一个基本路径。
应用次序
当同一分区内的多条指令同时适用时,理解每个分区应用的次序是很重要的,因为它会对最终效果起作用。应用次序如下所述:
1.<Directory>(正则表达式除外):多个<Directory>分区可以应用于单个请求,如果多个(非正则表达式)<Directory>分区匹配了包含文档的这个目录(或者它的上级目录中的一个),则按照从短到长的匹配次序应用指令。
2..htaccess文件按父目录到子目录的顺序应用。
3.<Files>和<FileMatch>同时被执行。
4.<Location>和<LocationMatch>也同时被执行。
先应用虚拟主机外面定义的相应分区和指令,再应用<VirtualHost>分区中的分区和指令。同一时间只有一个<VirtualHost>分区可以应用给请求。较晚的分区优先于较早的那些。
3.4正则表达式
正则表达式语法指南是Rege++文档的一部分,由John Maddock博士友情提供,Copyright ?1998-2004,包含在《Boost license》这本书里。完整的语法说明可以在《Boost.Regex documentation》中找到。
字面值
所的字符都是字面值,除了“.”“*”“?”“+”“(”“)”“{”“}”“[”“]”“^”和“$”。当这些字符由“\”前导时也是字面值。一个字面值是个匹配它自己的字符。
通配符
点字符“.”匹配空字符和换行符以外的任何单个字符。
重复
重复是被重复任意次数的表达式。一个表达式跟着“*”可以被重复任意次数,包括重复零次。一个表达式跟着“+”可以被重复任意次数,但是至少重复一次。一个表达式跟着“?”可以被只重复零次或者一次。当需要明确指定重复的最低次数和最高次数时,可以用限定运算符“{}”。这样“a{2}”是字母“a”重复两次。“a{2,4}”表示字母“a”重复2到4次。“a{2,}”表示字母“a”重复2到无限多次。注意“{}”里面必须没有空格。而且它没有对上限值和下限值限定范围。所有的重复表达式参考尽可能短的前子表达式:一个单独字符,一个字符集,或者一个用“()”括起来的子表达式,举几个例子:
? "ba*"匹配所有的"b","ba","baaa" 等等。
? "ba+"匹配"ba"或"baaa",但是不匹配"b"。
? "ba?"匹配"b"或者"ba"。
? "ba{2,4}"匹配"baa","baaa","baaaa"。
懒惰型重复
在重复之后附加一个“?”就是懒惰型的重复了。一个懒惰型的重复是指匹配尽可能短的字符串。
例如:匹配HTML标记对可以使用下面这样的正则表达式:
"<\s*tagname[^>]*>(.*?)<\s*/tagname\s*>"
在这种情况下$1将包含标签对之间的文本,而且是最短的匹配字符串。
插入成份
插入成分有两个用处——把项目编组到子表达式中,并且对生成的匹配标号。例如,表达式"(ab)*"将匹配所有的这类字符串"ababab"。所有的被插入成份标号的子匹配将可以用\N或者$N语法来回溯引用到。它允许子表达式匹配空字符串,子表达式以1为开始从左往右编号。子表达式0就是整个表达式。

正则表达式


无标记插入
有时候你需要把子表达式编组为插入成份,但是不想为这个插入成分而吐出另一个标记的子表达式。在这种情况下,一个非标记插入(?:expression)可能有用。例如,下例表达式可以创建一个非子表达式:
"(?:abc)*"
N择1标记

当表达式可以匹配一个子表达式或另一个的时候,N择1标记起作用了。每个N择1可以用|隔开。每个N择1标记是一个最大可能性前缀子表达式,它是和重复操作符相反的行为。
示例:
? "a(b|c)"匹配"ab"或"ac"
? "abc|def"匹配"abc"或"def"
预置符
一个预置符是一个可以匹配所有作为预置成员的单个字符的预置。预置字符用方括号“[”和“]”括起来,可以容纳字面值、字符序列、字符类、经整理过的对象以及等价的类。用^打头的预置声明可以排除包含的内容。
示例:
字面值
? "[abc]"匹配"a"或"b"或"b"。
? "[^abc]"匹配"a"和"b"和"c"之外的所有字符。
字符序列
? "[a-z]"匹配所有的从"a"到"z"的字符
? "[^A-Z]"匹配所有的字符除了从"A"到"Z"的这些字符。
字符类
字符类用语法"[:classname:]"来表示,classname是声明过的预设值中的一个。例如:"[[:space:]]"是所有的空白占位符的预设。下表中的字符类是可用的:

alnum

 

所有的alpha数字字母

 

alpha

 

字母表字符[a-zA-Z]。其它字符也可以包含在内,这取决于本地环境

 

blank

 

所有的空白字符,包含回车或者空格

 

cntrl

 

所有的控制字符

 

digit

 

从0到9的数字

 

graph

 

所有的图画字符

 

lower

 

所有的小写字母[a-z],其它的字符也可以包含在内,这取决于本地环境

 

print

 

所有的印刷字符

 

punct

 

所有的标点符号

 

space

 

所有的空白占位符

 

upper

 

所有的大写字母[A-Z],其它的字符也可以包含在内,这取决于本地环境

 

xdigit

 

所有的16进字字符0~9,A-F

 

word

 

所有的词汇字符,包括字母数字外加underscore

 

unicode

 

所有的编码大于255的字符,这只对大范围字符特征类生效

 

这里有一些缩写法可以代替以上字符类:
? \w 代替 [:word:]
? \s 代替 [:space:]
? \d 代替 [:digit:]
? \l 代替 [:lower:]
? \u 代替 [:upper:]

正则表达式

集合元素
集合元素一般采用预置声明内加[.tagname.]的格式。其中tagname既可以是一个单个字符,也可以是一个集合元素名。例如:[[.a.]]等价于[a],[[.comma.]]等价于[,]。ISAPI_Rewrite支持所有的标准POSIX集合元素名,以及下面的这些字符组合:“ae”、“ch”、“ll”、“ss”、“nj”、“dz”、“lj”、任意小写、大写、首字母大写的变化组合。多个字符集合元素可以导致预置匹配一个以上的字符。例如:[[.ae.]]将匹配两个字符,但是[^[.ae.]]只会匹配一个字符。
等价类
等价类一般采用预置声明内加[=tagname=]的格式,其中tagname既可以是单个字符,也可以是一个集合元素的名称,它能匹配同样的主要等价类成员的字符,就跟集合元素[.tagname.]一样。一个等级类是一个相同整理的字符预设,但主要是一个等价类的字符集,其主要排序关键字都是一样的(例如,字符串通常先依字符整理,然后根据重音,然后根据大小写。主要排序键与字符相关,次要与重音相关,再次与大小写相关。如果没有等价类符合tagname,则[=tagname=]是与[.tagname.]完全一样的。
Equivalence classes take the general form [=tagname=] inside a set declaration, where tagname is either a single character, or a name of a collating element, and matches any character that is a member of the same primary equivalence class as the collating element [.tagname.]. An equivalence class is a set of characters that collate the same, a primary equivalence class is a set of characters whose primary sort key are all the same (for example strings are typically collated by character, then by accent, and then by case; the primary sort key then relates to the character, the secondary to the accentation, and the tertiary to the case). If there is no equivalence class corresponding to tagname, then [=tagname=] is exactly the same as [.tagname.].
要在一个预设中包含字面值“-”,请这样做:使它成为开放的“[”或者“[^”后面的第一个字符、一个系列或者一个集合元素的末点,或者用一个前置的转义字符如“[\-]”。要在一个预设中包含一个字面值“[”或者“]”或者“^”,请把它们作为一个系列或者一个集合元素的末点,或者用一个前置的转义字符。
行锚
锚用来匹配一行开头或结尾的空串。“^”匹配行开头的空串,“$”匹配行结尾的空串。
回溯引用
回溯引用是引用前面已经被匹配的子表达式。这个引用是被匹配的子表达式,而不是表达式本身。回溯引用包括转义字符“\”跟着一个从1到9的数字。“\1”引用第一个子表达式,“\2”引用第二个,依次类推。举个例子,表达式“(.*)\1”匹配任何关于它的中点重复的字符串,比如说“abcabc”或者“xyzxyz”。一个对子表达式的回溯引用不参加任何匹配,匹配空字符串。在ISAPI_Rewrite中,所有的回溯引用是对整个RewriteRule和相应的RewriteCond指令是全局性相关的。RewriteRule指令中如果有RewirteCond子令的话,子匹配从相应的RewriteRule指令的第一个RewriteCond指令开始从上到下从左往右编号。
向前查找
向前查找有两种形式:正向前查找和负向前查找。
• "(?=abc)"匹配跟在表达式"abc"后面的零字符。
• "(?!abc)"匹配不跟在表达式"abc"后面的零字符。
通配符
下面的运算符提供了与GNU正则表达式库的兼容性。
• "\w"匹配任意单个组词字符,它等价于表达式“[[:word:]]”。
• "\W"匹配任意一个非组词字符,它等价于表达式“[^[:word:]]”。
• "\<"匹配词头空字符串。
• "\>"匹配词尾空字符串。
• "\b"匹配词头或者词尾空字符串。
• "\B"匹配词语中的空字符串。
转义字符
转义字符“\”含有多重意义:
• 转义字符可以引导一个运算符,例如:回溯引用、词操作符
• 转义字符可以使下面的字符正常,比如说“\*”代表一个字面值“*”,而不是重复运算符。

单个字符转义序列
下面的转义序列是单个字符的别名:

转义序列

 

字符代码

 

含义

 

\a

 

0x07

 

信号铃记号.

 

\t

 

0x09

 

制表符

 

\v

 

0x0B

 

垂直制表符

 

\e

 

0x1B

 

ASCII转义字符

 

\0dd

 

0dd

 

八进制字符代码,其中dd是一个或多个八进制数字。

 

\xXX

 

0xXX

 

十六进制字符代码,其中XX是一个或多个八进制数字。

 

\x{XX}

 

0xXX

 

十六进制字符代码,其中XX是一个或更多十六进制数字,可选用Unicode字符。

 

\cZ

 

z-@

 

ASCII转义序列control-Z,其中Z是任意一个编码大于或等于“@”的编码的ASCII字符。

 

杂项转义序列
以下提供perl的大部分兼容性,但是在\l、\L、\u和\U上有一些区别

转义序列

 

含义

 

\w

 

等价于 [[:word:]].

 

\W

 

等价于[^[:word:]].

 

\s

 

等价于[[:space:]]。

 

\S

 

等价于[^[:space:]]。

 

\d

 

等价于[[:digit:]]。

 

\D

 

等价于[^[:digit:]]。

 

\l

 

等价于[[:lower:]]。

 

\L

 

等价于[^[:lower:]]。

 

\u

 

等价于[[:upper:]]。

 

\U

 

等价于[^[:upper:]]。

 

\C

 

任何单个字符,等价于“.”

 

\X

 

匹配任何Unicode组合字符序列,例如“a\x0301”(字符a和一个尖角)

 

\Q

 

开始引号运算符。后面跟前的所有的内容都被当作字面值,直到发现一个\E结束运算符。

 

\E

 

结束引用运算符,终止一个由\Q开头的引用序列。

 

怎样得到匹配
正则表达式将匹配第一个可匹配字符串。如果从给定的起始处可以匹配到不止一个字符串,则它会匹配那个能匹配得最长的字符串。如果从同一个起始处有多个合适的匹配,而且每个匹配的长度都一样,则将选择那个第一子表达式匹配得最长的匹配。如果有两个以上的匹配字符串它们的第一子表达式匹配得一样长,则比较第二子表达式匹配的长度,如此类推。注意:ISAPI_Rewrite使用比封演算法。只有表达式匹配了整个顺序串才能得到匹配结果。例如:
• RewriteCond URL ^/somedir/.* #将匹配任何导向somedir目录以及它的子目录的请求,与此同时,
• RewriteCond URL ^/somedir/ #只匹配somedir根目录的请求。
对“病态”正则表达式的特别提示:
ISAPI_Rewrite 使用了一个非常强大的来自Boost库的正则表达式引擎。但是它依然有一些局限性:有着一些“病态”的表达式,它可能会指数级地消耗匹配时间。这些都涉及到嵌套重复运算符,例如试图对N个连续字母a匹配表达式“(a*a)*b”,消耗的时间将与N2成正比。这些表达式常常能改成另一种写法来避免这种问题。例如,“(a*a)*b”可以被改写成“a*b”,解析它消耗的时间与N成正比。在多数情况下,非嵌套重复表达式消耗的时间与N2成正比,但是,如果条款是相互排斥的,则它们会在线性时间里完成匹配。在“a*b”这种情况下,每个字符将要么匹配a要么匹配b或者不匹配。相较之下,“a*a”匹配器不能告知哪个分支被采取(第一个 a还是第二个a)因此必须尝试两种。
Regex可以检测出这种“病态”的正则表达式并终止和它们的匹配。这将使ISAPI_Rewrite的规则失效。当一个规则失效时,ISAPI_Rewrite将给客户端发送一个"Internal Server error - Rule Failed"的状态,以表示配置错误。

4.1AccessFileName指令

说明

 

设置分布式配置文件的名称

 

语法

 

AccessFileName filename [filename] ...

 

默认值

 

AccessFileName .htaccess

 

使用环境

 

server config

 

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/server/iis/12280.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

ISAPI_Rewrite 3.1 教程中文版

2021-01-10 编辑:网友投稿

第一章:软件介绍
ISAPI_Rewrite 是一款适用于IIS的功能强大的基于正则表达式的URL处理模块。它兼容Apache的mod_rewrite的语法,从而使仅仅复制.htaccess文件就把配置从appach移植到IIS中或者从IIS移值到appach中变成可能。请参阅3.2兼容性图表这一节。
ISAPI_Rewrite最重要的功能:
ISAPI_Rewrite提供了和Apach mod_rewrite相同的句法和行为,使仅仅拷贝.htaccess文件就完成配置移植成为功能。(要想阅读更多关于与mod_rewrite的兼容性,请参阅3.2兼容性图表这一节。)
正则表达式支持灵活而强大的配置。
极速而且容易升级的纯C++代码。
真正的分布式配置:实时监控服务器全局级别、虚拟主机(网站)级别、目录级别的.htaccess文件。
隔离性:用户级配置只影响本地用户环境,从而使ISAPI_Rewrite成为Web主机提供商的理想解决方案。
重要的应用示例:
搜索引擎优化。
一台Web服务器的代理内容经过另一台web服务器。
防止内容被吸血(盗链)。
阻断特定主机、反向链接或者烦人的搜索机器人。
内容商议:向不同的语言用户或者不同的浏览器用户提供不同的文件。示例
为群集式服务器架构模拟负载均衡。
定价资料
45天的试用期
单机版99美元
ISAPI_Rewrite精简版是免费的。在这里可以看到受限的细节说明。
大宗采购可议折扣。

2.1系统要求
ISAPI_Rewrite可以被安装在下列操作系统中:
Windows 2000 with IIS 5
Windows XP with IIS 5.1
Windows Server 2003 with IIS 6.0
Windows Vista with IIS 7.0
Windows Server 2008 with IIS 7.0
在安装ISAPI_Rewrite之前,操作系统中必须先安装IIS。
32位和64位的Windows版本都是支持的,但是你必须下载32位版和64位版两种不同的安装包。Windows Installer 2.0必须运行安装程序。你可以从微软的网站上下载到最新版本的Windows Installer。
在Windows Vista和Windows Server 2008上安装ISAPI_Rewrite,还必须先安装下面两个模块(默认情况下这两个模块是不安装的)
ISAPI过滤器
ISAPI 扩展

2.2安装程序
在运行安装包之前请先阅读系统要求部分。下载并安装某个版本的ISAPI_Rewrite.msi,依照安装向导的说明操作。安装过程是自动的,并有自我描述。ISAPI_Rewrite在自动安装过程中必须重启IIS。下列服务必须被重启:IISADMIN、W3SVC。不需要手工把任何ISAPI筛选器或者扩展加入到网站或者全局列表中。它能够在安装和配置过程中自动完成。
命令行安装
ISAPI_Rewrite也能够通过命令行进行后台安装。请使用以下命令行语法来安装:

复制代码 代码如下:

msiexec /i ISAPI_Rewrite3.msi /qn AcceptEULA=Yes REGISTRATIONCODE=Code
REGISTRATIONNAME=Name


用命令行来后台反安装ISAPI_Rewrite请使用下面的语法:

复制代码 代码如下:

msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes


2.3手工安装
要手工安装ISAPI_Rewrite的话,你必须下载不同的手工安装包包含所有必须的文件。ISAPI_Rewrite精简版不支持手工安装。你可以安装全部功能或者仅仅安装它们中的一部分。
手工安装包包含下列文件:
ISAPI_Rewrite.dll - 这是ISAPI筛选器本身。
ISAPI_RewriteProxy.dll - 这是为代理操作的ISAPI扩展模块必不可少的。
license.rtf - EULA的产品许可证。
ISAPI_Rewrite.chm - .文档文件。
httpd.conf - 全局配置文件示例。
安装ISAPI_Rewrite,首先你必须在你在IIS系统中注册ISAPI_Rewrite.dll作为ISAPI筛选器。按默认ISAPI_Rewrite.dll文件是用来作为全局ISAPI筛选器的。而且它还能够被安装到某个特定的网站里,你需要记住在同一时间段里只有一个ISAPI_Rewrite.dll实例能够加载到一个IIS工作进程里,这意味着如果你决定把ISAPI_Rewrite的ISAPI筛选器单独地安装到每个站点里的话,你必须把这些站点切换高隔离模式,从而为这些网站产生独立的工作进程。如果你需要在每个站点上分别安装ISAPI_Rewrite,我们通常会建议改为在整个IIS上全局地安装它。
在Window 2000,Window XP 和Windows Server 2003中注册ISAPI 筛选器,无论是整个IIS服务器要用它还是个别WEB网站要用它,都要用IIS 的MMC管理单元来把ISAPI_Rewrite.dll添到ISAPI筛选器列表。在Windows Vista和Windows Server 2008中首先你需要安装可选IIS组件:万维网服务、应用程序开发功能、ISAPI筛选器。
如果你需要代理服务器功能,你还需要将ISAPI_RewriteProxy.dll注册为ISAPI扩展来侍服文件扩展名“*. rwhlp”。在不同的IIS版本中要求不同的操作。请参阅你管理的IIS版本的文档来了解如何注册一个新的ISAPI扩展并把它映射到IIS系统的文件扩展名上。在Windows Vista和windows server 2008首先必须安装可选的IIS组件:万组网服务、应用程序开发功能、ISAPI筛选器。使用短路径名(8.3模式)作为ISAPI_RewriteProxy.dll的模块路径,如果路径里有一个空格字符,IIS载入这个模块时将失败。
把httpd.conf文件放在ISAPI_Rewrite.dll文件的同一目录下并编辑它。
把下列两行内容放到httpd.conf文件中以注册ISAPI_Rewrite 产品:
RegistrationName=Your registration name
RegistrationCode=REG-CODE-PROVIDED-FROM-HELICON依照“运行ISAPI_Rewrite的权限需求”这一部分的说明来检查文件系统权限。
2.4反安装
反安装程序会删除所有安装程序所生成的文件、从管理元库中注销筛选器,并删除所有由安装程序所添加的其它管理元库变化。如果用户决定在反安装过程中保留用户文件的话,下列用户数据文件在反安装后会被留下来。

文件名

 

说明

 

Program Files/Helicon/ISAPI_Rewrite/httpd.conf

 

用户规则的主配置文件

 

Program Files/Helicon/ISAPI_Rewrite/error.log

 

包含错误日志的文件

 

Program Files/Helicon/ISAPI_Rewrite/rewrite.log

 

包含重写日志的文件

 

.htaccess (various folders)

 

用户创建的含有规则的配置文件

 

“删除用户创建的文件”的选项在将反安装过程中提供给用户。如果启用这个选项则卸载程序也将删除位于Program Files文件夹里用户创建的文件。 .htaccess文件不会被删除。
要用命令行后台卸载ISAPI_Rewrite,请使用下面的语法:

复制代码 代码如下:


msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes


2.5运行ISAPI_Rewrite所需的权限
在一个干净的默认Windows系统上自动安装ISAPI_Rewrite不要求任何权限调整。但是一些其它产品比如说Plesk、IIS锁定工具的安装,等等,可能收紧服务器的安全性,并妨碍ISAPI_Rewrite的正常运行。下面是ISAPI_Rewrite的权限需求的列表单子:
在Windows 2000、Windows XP和Windows 2003的IIS5兼容模式下,筛选器运行在System帐户下的inetinfo.exe进程中。那个system帐户至少得被授予放置ISAPI_Rewrite安装文件的那个文件夹的“读取”和“目录浏览”的权限。我们还建议给予system帐号对这个文件夹的一般修改权。这将允许生成一些包含解析或者其它错误的文件。system帐号还必须在任何包含了.htaccess文件的网站文件夹里同样被授予这些权限,否则ISAPI_Rewrite将不能加载并监视它。
请稍留意ISAPI_Rewrite安装目录上的任何一点拒绝权限设置,因为在Windows 操作系统中,拒绝权限优先于任何允许权限记录。
在Windows 2003的天然IIS模式(WPI模式)以及Windows Server 2008中,无论是筛选器还是代理服务都运行在每个网站相应的运行程序池的w3p.exe工作进程中,每个应用程序池都可以使用它自己的定制来配置,这可能使权限设置成了一种复杂的工作。然而,在一个正确的IIS配置中,每个使用中的定制必须是IIS_WPG组的一个成员。因此,IIS_WPG组可以被用来代替System帐号去分配前面所写的权限需求。
在Windows Vista 中权限配置是和Windows 2003的配置差不多的,只是它没有IIW_WPG组。所以,所有的WPI帐号(一般Network Service是它的惟一帐号)都必须授予上述必需权限。
此外,为了让代理服务功能能工作,你必须在网站属性或者运行代理服务的web应用程序的属性中给予一个“纯脚本”的执行权限。
2.6MSI的自定义行为自定义行为
 

自定义行为

 

说明

 

WiseAltStartup
自动智能启动

 

为运行在延时模式中的自定义行为保存属性的当前状态。
使用一个可执行文件(dll)
发生在:安装、反安装。

 

WiseCleanup
智能清理

 

这个行为被调用来清理上一个自定义行为所遗留下的临时文件
使用一个可执行文件(dll)
发生在:安装、反安装。

 

WiseStartup
智能启动

 

这个行为使调用一个.dll文件或者提取必要Wisescript.exe文件和.dll文件的行为可以传递参数。
使用一个可执行文件(dll)
发生在: 安装、反安装

 

WiseUpgradeCheck
智能可选择地升级

 

这个行为被调用来解决当Windows安装程序运行时不检测应用程序的早期版本的问题。
使用一个可执行文件(dll)
发生在:安装。

 

WiseUpgradeCheckEx
智能预选升级

 

添加这个行为用来解决当Windows安装程序运行时不检测应用程序的早期版本的问题。
使用一个可执行文件(dll)
发生在:安装。

 

WiseGetIISVersion
智能获得IIS版本

 

对主要的IIS版本设置属性(IISVERSION).
使用一个可执行文件(dll)
发生在:安装。

 

RegisterFilterInMetabase
在管理元库中注册筛选器

 

这个行为添加一个命名为ISAPI_Rewrite3的全局ISAPI筛选器到IIS管理元库里
IIS5, IIS6 管理元库: IIS:/LM/W3SVC/Filters/ add key ISAPI_Rewrite3
IIS:/LM/W3SVC/Filters/FilterLoadOrder append "ISAPI_Rewrite3"
使用一个可执行文件(dll)
发生在:安装。

 

RemoveFilterFromMetabase
从管理元库中删除筛选器

 

这个行为从IIS管理元库里移除了名为ISAPI_Rewrite3的全局ISAPI筛选器。
IIS5, IIS6 管理元库: IIS://localhost/W3SVC/LM/W3SVC/Filters/ delete key ISAPI_Rewrite3
IIS:/LM/W3SVC/Filters/FilterLoadOrder remove"ISAPI_Rewrite3"
使用一个可执行文件(dll)
发生在:反安装、回滚。

 

AddApplicationExtension
添加应用程序扩展

 

只用于Windows 2003机器添加ISAPI_RewriteProxy.dll到ISAPI扩展中,并使Web服务器扩展名列表中的这个ISAPI扩展名可用。
IIS6管理元库: IIS:/LM/W3SVC/
adds entry to the在管理元库属性 WebSvcExtRestrictionList中增加metabase property "ISAPI_Rewrite3 proxy"条目;
在管理元库属性 ApplicationDependencies 增加"ISAPI_Rewrite3 proxy;ISAPI_Rewrite3"条目;
使用一个可执行文件(dll)
发生在:安装。

 

RemoveApplicationExtension
删除应用程序扩展

 

只用于Windows 2003从ISAPI扩展中删除ISAPI_RewriteProxy.dll,并从web服务器扩展名列表中删除这个ISAPI扩展名。
IIS6管理元库: IIS:/LM/W3SVC/
1.从管理元库属性 WebSvcExtRestrictionList 中删除"ISAPI_Rewrite3 proxy"条目;
2.从管理元库属性 ApplicationDependencies中删除"ISAPI_Rewrite3 proxy;ISAPI_Rewrite3"条目;
使用一个可执行文件(dll)
发生在:反安装、回滚。

 

RegisterExtensionInScriptMap
在脚本映射中注册扩展

 

在IIS管理员库中将ISAPI_RewriteProxy.dl注册为ISAPI扩展来处理*.rwhlp文件扩展名
IIS5,IIS6管理元库: IIS://LM/W3SVC/
使用一个可执行文件(dll)
发生在:安装。

 

RemoveExtensionFromScriptMap
从脚本映射中删除扩展

 

从IIS管理元库中移除作为ISAPI扩展、用于处理*.rwhlp文件扩展名的ISAPI_Rewrite.dll的注册信息
IIS5, IIS6管理元库: IIS://LM/W3SVC/
使用一个可执行文件(dll)
发生在:反安装、回滚。

 

GetServisesStatus
获得服务状态

 

保存IISADMIN、W2WC、NNTP、SMTP 和FTP 服务的当前状态
创建msi属性: [SERVICES_STATUS]
使用一个可执行文件(dll)
发生在: 安装、反安装。

 

StartServicesEx
按预设开启服务

 

根据状态预设来启动ISADMIN、W2WC、NNTP、 SMTP 和 FTP 服务
使用msi 属性: [SERVICES_STATUS]
使用一个可执行文件(dll)
发生在: 安装、反安装。

 

SaveProductID
保存产品ID

 

如果要注册产品的话,保存REGISTRATIONNAME和REGISTRATIONCODE的属性值
使用msi 属性: [REGISTRATIONNAME] , [REGISTRATIONCODE];
使用文件: [INSTALLDIR]\ISAPI_Rewrite3\httpd.conf
使用一个可执行文件(dll)
发生在: 安装。

 

Check32bitMode
检测32位模式

 

在64位系统中检查32位IIS兼容模式是否可用,从而安装正确的ISAPI筛选器版本。IIS6, IIS7
使用管理元库路径: IIS://LM/W3SVC/AppPools property Enable32bitAppOnWin64;
使用msi 属性:[ENABLE32BITAPPONWIN64]
检查一个32位的应用程序是否能运行在一台安装了64位版本的windows的电脑上。
使用javascript脚本
发生在: 安装。

 

CheckIISModules
检测IIS模块

 

在IIS7的机器上检查是否需要安装IsapiFilterModule和IsapiModule模块
IIS7 管理元库路径:
<system.webServer>
<globalModules>
<add name="IsapiModule" image="%windir%\System32\inetsrv\isapi.dll" />
<add name="IsapiFilterModule" image="%windir%\System32\inetsrv\filter.dll" />

</globalModules>
</system.webServer>
使用javascript脚本
发生在: 安装。

 

AddGlobalIsapiFilter
添加全局ISAPI筛选器

 

只用于IIS7的机器。这个行为会在IIS管理元库里添加一个命名为ISAPI_Rewrite3的全局ISAPI_Rewrite筛选器
IIS7的管理元库路径:
<configuration>
<system.webServer>
<isapiFilters>
<filters>
<filter name="ISAPI_Rewrite3" path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll" enabled="true" enableCache="false">
</filter>
</filters>
</isapiFilters>
</system.webServer>
</configuration>
使用JavaScript脚本
发生在:安装。

 

DeleteGlobalIsapiFilter
删除全局ISAPI过滤器

 

只用于IIS7的机器,这个行为会从IIS管理元库中删除名为ISAPI_Rewrite3的全局ISAPI筛选器。
IIS7的管理元库路径:
<configuration>
<system.webServer>
<isapiFilters>
<filters>
<filter name="ISAPI_Rewrite3" path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll" enabled="true" enableCache="false" >
</filter>
</filters>
</isapiFilters>
</system.webServer>
</configuration>
使用JavaScript脚本
发生在:反安装、回滚。

 

AddIsapiCgiRestriction
添加ISAPI CGI约束

 

Only for IIS7 machines register ISAPI_RewriteProxy.dll as ISAPI extension in IIS metabase.
只用于IIS7的机器,在IIS管理元库中将ISAPI_RewriteProxy.dl为ISAPI扩展
IIS7管理元库路径:
<configuration>
<system.webServer>
<security>
<isapiCgiRestriction>
<add path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" allowed="true" description="Helicon Proxy" />
</isapiCgiRestriction>
</security>
</system.webServer>
</configuration>
使用JavaScript脚本
发生在:安装。

 

DeleteIsapiCgiRestriction
删除ISAPI CGI约束

 

只用于IIS7的机器,从IIS管理元库中删除用作ISAPI扩展的ISAPI_RewriteProxy.dll。
IIS7 管理元库路径:
<configuration>
<system.webServer>
<security>
<isapiCgiRestriction>
<add path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" allowed="true" description="Helicon Proxy" />
</isapiCgiRestriction>
</security>
使用JavaScript脚本
发生在:反安装、回滚。

 

AddScriptMap
添加脚本映射

 

只用于IIS7的机器,在IIS管理元库中将ISAPI_RewriteProxy.dll注册为ISAPI扩展用于处理*.rwhlp文件扩展名。
IIS7管理元库路径:
<configuration>
<system.webServer>
<handlers>
<add name="Helicon Proxy" path="*.rwhlp" verb="*" modules="IsapiModule" scriptProcessor="C:\Program
Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" resourceType="Unspecified"/>

</handlers>
</system.webServer>
</configuration>
使用JavaScript脚本
发生在:安装。

 

DeleteScriptMap
删除脚本映射

 

只用于IIS7的机器,从IIS管理元库里去除用作ISAPI扩展以处理*.rwhlp文件扩展名的ISAPI_RewriteProxy.dll的注册
IIS7管理元库路径:
<configuration>
<system.webServer>
<handlers>
<add name="Helicon Proxy" path="*.rwhlp" verb="*" modules="IsapiModule" scriptProcessor="C:\Program
Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" resourceType="Unspecified"/>

</handlers>
</system.webServer>
</configuration>
使用JavaScript脚本
发生在:反安装、回滚。

 

3.1基本概念

ISAPI_Rewrite提供了一个基于规则的重写引擎能飞速重写被请求的URL。它支持几乎无限量的规则和几乎无限量的附加规则条件来提供真正灵活和有效的URL处理机制。可以根据HTTP头、服务器变量、被请求的URL本身以及其它不同的条件的测试结果来对URL作出处理。
URL数据处理是用一个文本配置文件来定制的,内含各种指令设置。配置分几种等级。首先是全局(服务器范围的)配置指令,放置在ISAPI_Rewrite安装目录里的一个名为httpd.conf的文件里。那里还有若干个标签可以封装应用到特殊位置的指令:<VirtualHost>、<Directory>、<DirectoryMatch>、<Files>、 <FilesMatch>、<Location>以及<LocationMatch>。最后ISAPI_Rewrite支持可以放在任何网站目录里的.htaccess文件,那些文件中的规则可以应用到该位置以及它的子目录中。所有的配置文件在每次修改文件后都会被自动重载。允许用第三方程序和脚本来修改文件。
在很多情况下ISAPI_Rewrite是用来重写URL的。除了重写之外,ISAPI_REWRITE能够修改、生成、删除任何其它客户端Request中的HTTP头。模块操作可以载入改写、代理、重定向或者阻断原始客户端到服务器的请求。
Rewriting可能使服务器在得到了一个客户端的源请求时用一个新的URL继续请求处理。新的URL可以包括查询串部分(跟在问号后面),也可以指向任何一个完全的静态文件或者脚本(例如asp)、或者程序(例如.exe),等等。对用户和网站配置来说重写是彻底透明的。因为它Web应用程序收到请求之前在服务器内部执行。
Proxying使URL经过内部处理后指向另一台服务器,并很快传递到远程服务器上(换言之,规则处理在这里中止了)。远程服务器的响应很快被传回客户端。代理服务器要求你指定完整的有效URL,以协议、包括主机名开头等等。ISAPI_Rewrite使用ISAPI扩展来处理代理请求,你可以在“代理服务器配置”这一章里读到更多信息。
Redirection将发送一个带有重定向指令的即时响应(HTTP响应码为302或者说301),将网址设置为一个新的位置。您可以在重定向指令里使用绝对URL格式(这是RFC2616所要求的)将请求重定向到不同的主机、端口和协议。如果此信息被忽略, ISAPI_Rewrite将自动照当前的协议、服务器名称和目录位置提供URL。重定向指令总是导致重写引擎中止处理后面的规则序列。
每个规则按它在配置文件中出现的顺序来应用。目录级配置文件从父路径开始一个接一个地处理,来自于全局配置文件的规则最先适用。
在修改URL之前ISAPI_Rewrite会保存原URL到Http头,命名为X-Rewrite-URL。然后它能够在脚本中作为HTTP_X_REWRITE_URL服务器变量取回。因为在IIS里,系统变量名不能被修改,所以ISAPI_Rewrite不能提供与Apache兼容的变量名REQUEST_URI。如果你的应用程序的设计要依赖于REQUEST_URI变量,你必须修改它,用HTTP_X_REWRITE_URL变量来代替。下面是一个PHP代码补丁的示例:

if (isset($_SERVER['HTTP_X_REWRITE_URL']))
{
$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
}

后面跟有RewriteRule(或者RewriteProxy)指令的多重RewriteCond指令只影响单个规则。如果一些条件需要被用于多个规则,必须重复写这些条件指令以应用到每条规则上。

3.2和Apache下mod_rewrite的兼容性

这个版本的ISAPI_Rewrite是为了最大程度上保持与Apache的mod_rewrite的兼容性。这个目标已经很大程度上实现了,尽管有一些功能无法执行,因为它们和Apeach以及UNIX结构高度绑定,而且它们在IIS上执行是不敏感的。举例说明:第H条:“强制内容处理”标记不能执行,因为在IIS中内容处理的范围依赖于扩展名。或者第[NS]条:“没有子请求”标记是无意义的,因为在IIS中是没有子请求的。
这里有一个完整的ISAPI_Rewrite和mod_rewrite兼容性图表。标记为绿色的功能或指令是充分支持的,黄色的功能是部分支持或计划在下一版本中支持,标示为红色的功能是不支持的。
· 兼容Perl的正则表达式 (plus extended syntax)
· 服务器级httpd.conf配置
· 虚拟网站.htaccess配置文件
· 目录.htaccess配置文件
· <VirtualHost>
· <Directory>
· <DirectoryMatch>
· <Files>
· <FilesMatch>
· <Location>
· <LocationMatch>
· AccessFileName
· RewriteEngine
· RewriteRule
o $N 规则后向引用
o %N RewriteCond 后向引用
o ${mapname:key|default}
o %{VARNAME} 服务器变量
o '!' 取非
o [C] 与下一个规则联锁
o [CO=name:val:domain:lifetime:path] 设置cookie
o [E=var:val] 设置环境变量
o [F] 强制禁止应答
o [G] 强制继续应答
o [H=content-handler] 明确的内容处理 (不适用)
o [L] 上一个规则标记
o [N] 再次应用规则
o [NC] 大小写不敏感
o [NE] 不转义输出
o [NS]非内部子请求
o [P]代理通过
o [PT] 传递通过下一个处理程序 (一直开启)
o [QSA] 追加查询字符串
o [R =code] 重定向
o [S=num] 跳到下面第 n条规则
o [T=MIME-type] 强制明确应答 MIME 类型
· RewriteCond
o [NC] 大小写不敏感
o [OR] 逻辑并集
o %{HTTP:header}
o '!'
o '<CondPattern' 大于比较符
o '>CondPattern' 小于比较符
o '=CondPattern' 等于比较符
o '-d' 目录存在
o '-f' 文件存在
o '-s' 非零文件
o '-l' 符号链接
o '-x' 有可执行权限的文件
o '-F' 通过子请求文件存在
o '-U' 通过子请求URL存在
· RewriteBase
· RewriteMap
o txt: 文本映射
o rnd: 随机映射
o int: 内部函数 toupper, tolower, escape, unescape
o prg: 外部程序
o dbm: 散列文件
· RewriteLog
· RewriteLogLevel
· RewriteOptions
· RewriteLock
· AllowOverride

3.3使用环境以及处理顺序
以下是这个程序文档中要被用到的使用环境的详解:
server config
这个标志表示该指令可以用在全局httpd.conf配置文件中,但是不能用在任何一个分区(例如<Virtualhost>或者<Directory>)内部。它不允许放在.htaccess文件中。
vitrual host
这意味着指令可以出现在<VirtualHost>容器内。
directory
这个标志表示指令在<Diretory>、<Location>、<Files>容器内可用,而且它们的正则表达式是等价的。
.htaccess
使用环境标为它的指令可以出现在每个目录的.htaccess文件中。记住当RewriteRule指令用在.htaccess配置文件中时,它将自动从路径中剥去本地目录前缀,只对剩下的部分应用规则。你可以使用RewriteBase指令显式地给这些规则指定一个基本路径。
应用次序
当同一分区内的多条指令同时适用时,理解每个分区应用的次序是很重要的,因为它会对最终效果起作用。应用次序如下所述:
1.<Directory>(正则表达式除外):多个<Directory>分区可以应用于单个请求,如果多个(非正则表达式)<Directory>分区匹配了包含文档的这个目录(或者它的上级目录中的一个),则按照从短到长的匹配次序应用指令。
2..htaccess文件按父目录到子目录的顺序应用。
3.<Files>和<FileMatch>同时被执行。
4.<Location>和<LocationMatch>也同时被执行。
先应用虚拟主机外面定义的相应分区和指令,再应用<VirtualHost>分区中的分区和指令。同一时间只有一个<VirtualHost>分区可以应用给请求。较晚的分区优先于较早的那些。
3.4正则表达式
正则表达式语法指南是Rege++文档的一部分,由John Maddock博士友情提供,Copyright ?1998-2004,包含在《Boost license》这本书里。完整的语法说明可以在《Boost.Regex documentation》中找到。
字面值
所的字符都是字面值,除了“.”“*”“?”“+”“(”“)”“{”“}”“[”“]”“^”和“$”。当这些字符由“\”前导时也是字面值。一个字面值是个匹配它自己的字符。
通配符
点字符“.”匹配空字符和换行符以外的任何单个字符。
重复
重复是被重复任意次数的表达式。一个表达式跟着“*”可以被重复任意次数,包括重复零次。一个表达式跟着“+”可以被重复任意次数,但是至少重复一次。一个表达式跟着“?”可以被只重复零次或者一次。当需要明确指定重复的最低次数和最高次数时,可以用限定运算符“{}”。这样“a{2}”是字母“a”重复两次。“a{2,4}”表示字母“a”重复2到4次。“a{2,}”表示字母“a”重复2到无限多次。注意“{}”里面必须没有空格。而且它没有对上限值和下限值限定范围。所有的重复表达式参考尽可能短的前子表达式:一个单独字符,一个字符集,或者一个用“()”括起来的子表达式,举几个例子:
? "ba*"匹配所有的"b","ba","baaa" 等等。
? "ba+"匹配"ba"或"baaa",但是不匹配"b"。
? "ba?"匹配"b"或者"ba"。
? "ba{2,4}"匹配"baa","baaa","baaaa"。
懒惰型重复
在重复之后附加一个“?”就是懒惰型的重复了。一个懒惰型的重复是指匹配尽可能短的字符串。
例如:匹配HTML标记对可以使用下面这样的正则表达式:
"<\s*tagname[^>]*>(.*?)<\s*/tagname\s*>"
在这种情况下$1将包含标签对之间的文本,而且是最短的匹配字符串。
插入成份
插入成分有两个用处——把项目编组到子表达式中,并且对生成的匹配标号。例如,表达式"(ab)*"将匹配所有的这类字符串"ababab"。所有的被插入成份标号的子匹配将可以用\N或者$N语法来回溯引用到。它允许子表达式匹配空字符串,子表达式以1为开始从左往右编号。子表达式0就是整个表达式。

正则表达式


无标记插入
有时候你需要把子表达式编组为插入成份,但是不想为这个插入成分而吐出另一个标记的子表达式。在这种情况下,一个非标记插入(?:expression)可能有用。例如,下例表达式可以创建一个非子表达式:
"(?:abc)*"
N择1标记

当表达式可以匹配一个子表达式或另一个的时候,N择1标记起作用了。每个N择1可以用|隔开。每个N择1标记是一个最大可能性前缀子表达式,它是和重复操作符相反的行为。
示例:
? "a(b|c)"匹配"ab"或"ac"
? "abc|def"匹配"abc"或"def"
预置符
一个预置符是一个可以匹配所有作为预置成员的单个字符的预置。预置字符用方括号“[”和“]”括起来,可以容纳字面值、字符序列、字符类、经整理过的对象以及等价的类。用^打头的预置声明可以排除包含的内容。
示例:
字面值
? "[abc]"匹配"a"或"b"或"b"。
? "[^abc]"匹配"a"和"b"和"c"之外的所有字符。
字符序列
? "[a-z]"匹配所有的从"a"到"z"的字符
? "[^A-Z]"匹配所有的字符除了从"A"到"Z"的这些字符。
字符类
字符类用语法"[:classname:]"来表示,classname是声明过的预设值中的一个。例如:"[[:space:]]"是所有的空白占位符的预设。下表中的字符类是可用的:

alnum

 

所有的alpha数字字母

 

alpha

 

字母表字符[a-zA-Z]。其它字符也可以包含在内,这取决于本地环境

 

blank

 

所有的空白字符,包含回车或者空格

 

cntrl

 

所有的控制字符

 

digit

 

从0到9的数字

 

graph

 

所有的图画字符

 

lower

 

所有的小写字母[a-z],其它的字符也可以包含在内,这取决于本地环境

 

print

 

所有的印刷字符

 

punct

 

所有的标点符号

 

space

 

所有的空白占位符

 

upper

 

所有的大写字母[A-Z],其它的字符也可以包含在内,这取决于本地环境

 

xdigit

 

所有的16进字字符0~9,A-F

 

word

 

所有的词汇字符,包括字母数字外加underscore

 

unicode

 

所有的编码大于255的字符,这只对大范围字符特征类生效

 

这里有一些缩写法可以代替以上字符类:
? \w 代替 [:word:]
? \s 代替 [:space:]
? \d 代替 [:digit:]
? \l 代替 [:lower:]
? \u 代替 [:upper:]

正则表达式

集合元素
集合元素一般采用预置声明内加[.tagname.]的格式。其中tagname既可以是一个单个字符,也可以是一个集合元素名。例如:[[.a.]]等价于[a],[[.comma.]]等价于[,]。ISAPI_Rewrite支持所有的标准POSIX集合元素名,以及下面的这些字符组合:“ae”、“ch”、“ll”、“ss”、“nj”、“dz”、“lj”、任意小写、大写、首字母大写的变化组合。多个字符集合元素可以导致预置匹配一个以上的字符。例如:[[.ae.]]将匹配两个字符,但是[^[.ae.]]只会匹配一个字符。
等价类
等价类一般采用预置声明内加[=tagname=]的格式,其中tagname既可以是单个字符,也可以是一个集合元素的名称,它能匹配同样的主要等价类成员的字符,就跟集合元素[.tagname.]一样。一个等级类是一个相同整理的字符预设,但主要是一个等价类的字符集,其主要排序关键字都是一样的(例如,字符串通常先依字符整理,然后根据重音,然后根据大小写。主要排序键与字符相关,次要与重音相关,再次与大小写相关。如果没有等价类符合tagname,则[=tagname=]是与[.tagname.]完全一样的。
Equivalence classes take the general form [=tagname=] inside a set declaration, where tagname is either a single character, or a name of a collating element, and matches any character that is a member of the same primary equivalence class as the collating element [.tagname.]. An equivalence class is a set of characters that collate the same, a primary equivalence class is a set of characters whose primary sort key are all the same (for example strings are typically collated by character, then by accent, and then by case; the primary sort key then relates to the character, the secondary to the accentation, and the tertiary to the case). If there is no equivalence class corresponding to tagname, then [=tagname=] is exactly the same as [.tagname.].
要在一个预设中包含字面值“-”,请这样做:使它成为开放的“[”或者“[^”后面的第一个字符、一个系列或者一个集合元素的末点,或者用一个前置的转义字符如“[\-]”。要在一个预设中包含一个字面值“[”或者“]”或者“^”,请把它们作为一个系列或者一个集合元素的末点,或者用一个前置的转义字符。
行锚
锚用来匹配一行开头或结尾的空串。“^”匹配行开头的空串,“$”匹配行结尾的空串。
回溯引用
回溯引用是引用前面已经被匹配的子表达式。这个引用是被匹配的子表达式,而不是表达式本身。回溯引用包括转义字符“\”跟着一个从1到9的数字。“\1”引用第一个子表达式,“\2”引用第二个,依次类推。举个例子,表达式“(.*)\1”匹配任何关于它的中点重复的字符串,比如说“abcabc”或者“xyzxyz”。一个对子表达式的回溯引用不参加任何匹配,匹配空字符串。在ISAPI_Rewrite中,所有的回溯引用是对整个RewriteRule和相应的RewriteCond指令是全局性相关的。RewriteRule指令中如果有RewirteCond子令的话,子匹配从相应的RewriteRule指令的第一个RewriteCond指令开始从上到下从左往右编号。
向前查找
向前查找有两种形式:正向前查找和负向前查找。
• "(?=abc)"匹配跟在表达式"abc"后面的零字符。
• "(?!abc)"匹配不跟在表达式"abc"后面的零字符。
通配符
下面的运算符提供了与GNU正则表达式库的兼容性。
• "\w"匹配任意单个组词字符,它等价于表达式“[[:word:]]”。
• "\W"匹配任意一个非组词字符,它等价于表达式“[^[:word:]]”。
• "\<"匹配词头空字符串。
• "\>"匹配词尾空字符串。
• "\b"匹配词头或者词尾空字符串。
• "\B"匹配词语中的空字符串。
转义字符
转义字符“\”含有多重意义:
• 转义字符可以引导一个运算符,例如:回溯引用、词操作符
• 转义字符可以使下面的字符正常,比如说“\*”代表一个字面值“*”,而不是重复运算符。

单个字符转义序列
下面的转义序列是单个字符的别名:

转义序列

 

字符代码

 

含义

 

\a

 

0x07

 

信号铃记号.

 

\t

 

0x09

 

制表符

 

\v

 

0x0B

 

垂直制表符

 

\e

 

0x1B

 

ASCII转义字符

 

\0dd

 

0dd

 

八进制字符代码,其中dd是一个或多个八进制数字。

 

\xXX

 

0xXX

 

十六进制字符代码,其中XX是一个或多个八进制数字。

 

\x{XX}

 

0xXX

 

十六进制字符代码,其中XX是一个或更多十六进制数字,可选用Unicode字符。

 

\cZ

 

z-@

 

ASCII转义序列control-Z,其中Z是任意一个编码大于或等于“@”的编码的ASCII字符。

 

杂项转义序列
以下提供perl的大部分兼容性,但是在\l、\L、\u和\U上有一些区别

转义序列

 

含义

 

\w

 

等价于 [[:word:]].

 

\W

 

等价于[^[:word:]].

 

\s

 

等价于[[:space:]]。

 

\S

 

等价于[^[:space:]]。

 

\d

 

等价于[[:digit:]]。

 

\D

 

等价于[^[:digit:]]。

 

\l

 

等价于[[:lower:]]。

 

\L

 

等价于[^[:lower:]]。

 

\u

 

等价于[[:upper:]]。

 

\U

 

等价于[^[:upper:]]。

 

\C

 

任何单个字符,等价于“.”

 

\X

 

匹配任何Unicode组合字符序列,例如“a\x0301”(字符a和一个尖角)

 

\Q

 

开始引号运算符。后面跟前的所有的内容都被当作字面值,直到发现一个\E结束运算符。

 

\E

 

结束引用运算符,终止一个由\Q开头的引用序列。

 

怎样得到匹配
正则表达式将匹配第一个可匹配字符串。如果从给定的起始处可以匹配到不止一个字符串,则它会匹配那个能匹配得最长的字符串。如果从同一个起始处有多个合适的匹配,而且每个匹配的长度都一样,则将选择那个第一子表达式匹配得最长的匹配。如果有两个以上的匹配字符串它们的第一子表达式匹配得一样长,则比较第二子表达式匹配的长度,如此类推。注意:ISAPI_Rewrite使用比封演算法。只有表达式匹配了整个顺序串才能得到匹配结果。例如:
• RewriteCond URL ^/somedir/.* #将匹配任何导向somedir目录以及它的子目录的请求,与此同时,
• RewriteCond URL ^/somedir/ #只匹配somedir根目录的请求。
对“病态”正则表达式的特别提示:
ISAPI_Rewrite 使用了一个非常强大的来自Boost库的正则表达式引擎。但是它依然有一些局限性:有着一些“病态”的表达式,它可能会指数级地消耗匹配时间。这些都涉及到嵌套重复运算符,例如试图对N个连续字母a匹配表达式“(a*a)*b”,消耗的时间将与N2成正比。这些表达式常常能改成另一种写法来避免这种问题。例如,“(a*a)*b”可以被改写成“a*b”,解析它消耗的时间与N成正比。在多数情况下,非嵌套重复表达式消耗的时间与N2成正比,但是,如果条款是相互排斥的,则它们会在线性时间里完成匹配。在“a*b”这种情况下,每个字符将要么匹配a要么匹配b或者不匹配。相较之下,“a*a”匹配器不能告知哪个分支被采取(第一个 a还是第二个a)因此必须尝试两种。
Regex可以检测出这种“病态”的正则表达式并终止和它们的匹配。这将使ISAPI_Rewrite的规则失效。当一个规则失效时,ISAPI_Rewrite将给客户端发送一个"Internal Server error - Rule Failed"的状态,以表示配置错误。

4.1AccessFileName指令

说明

 

设置分布式配置文件的名称

 

语法

 

AccessFileName filename [filename] ...

 

默认值

 

AccessFileName .htaccess

 

使用环境

 

server config

 

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/server/iis/12280.shtml

相关文章

风云图片

推荐阅读

返回IIS频道首页